/**
 * @file gjson_data.h
 * @brief json data operation
 * @author JakeYang <add358@gmail.com>
 * @version 0.1
 * @date 2016-03-01
 */

#ifndef __GJSON_DATA_H__
#define __GJSON_DATA_H__

#include <glib.h>

G_BEGIN_DECLS

#define GJSON_KEY_MAX   (0xff)  /*max length of key name*/

typedef struct _GJsonData GJsonData;

/**
 * @brief g_json_data_new   创建GJsonData类型数据
 * @param data              指向json的原始数据
 * @return 成功返回GJsonData类型数据，失败返回NULL
 */
extern GJsonData* g_json_data_new(gchar *data);

/**
 * @brief g_json_data_free  释放GJsonData数据资源
 * @param d                 指向要释放GJsonData类型数据
 * @param free_segment      标志位，如值为TRUE，则同时释放掉GJsonData类型维护的json原始数据
 */
extern void g_json_data_free(GJsonData *d, gboolean free_segment);

/**
 * @brief g_json_data_skip  跳过空白字符和注释行
 * @param d                 指向GJsonData类型数据
 */
extern void g_json_data_skip(GJsonData *d);

/**
 * @brief g_json_data_char  获取GJsonData当前的字符
 * @param d                 指向GJsonData类型数据
 * @return 返回当前字符
 */
extern gchar g_json_data_char(const GJsonData *d);

/**
 * @brief g_json_data_forward   设置GJsonData向前移动字节数
 * @param d                     指向GJsonData类型数据
 * @param offset                偏移量
 */
extern void g_json_data_forward(GJsonData *d, gint offset);

/**
 * @brief g_json_data_get_str   获取GJsonData当前的字符串
 * @param d                     指向GJsonData类型数据
 * @return 成功返回字符串，该字符串需要手动释放；失败返回NULL；
 */
extern gchar *g_json_data_get_str(GJsonData *d);

/**
 * @brief g_json_data_equal_char    判断GJsonData当前字符是否与给定字符相等
 * @param d                         指向GJsonData类型数据
 * @param c                         要比较的字符
 * @return 相等返回TRUE， 不相等返回FALSE
 */
extern gboolean g_json_data_equal_char(const GJsonData *d, gchar c);

/**
 * @brief g_json_data_equal_str 判断GJsonData当前字符串是否与给定字符串相等
 * @param d                     指向GJsonData类型数据
 * @param str                   要比较的字符串
 * @param n                     字符串长度
 * @return 相等返回TRUE， 不相等返回FALSE
 */
extern gboolean g_json_data_equal_str(const GJsonData *d, const gchar *str, gint n);

/**
 * @brief g_json_data_get_number    获取GJsonData当前数字
 * @param d                         指向GJsonData类型数据
 * @return 成功返回数字的字符串形式，失败返回NULL
 */
extern gchar *g_json_data_get_number(GJsonData *d);

G_END_DECLS

#endif /* end of include guard */
